import { post, get } from './commonApi.js'

/**
 * 任务相关API
 */

/**
 * 创建任务
 * @param {Object} params - 任务参数
 * @param {string} params.taskType - 任务类型，固定为'templateToFile'
 * @param {string|number} params.templateId - 模板文件的id
 * @param {string} params.season - 学期
 * @param {string|number} params.grade - 年级，如2024
 * @param {string} params.major - 专业
 * @param {string} [params.courseName] - 课程名称（可选）
 * @param {string|number} [params.courseId] - 课程ID（可选）
 * @param {string} [params.fileOutputName] - 自定义输出文件名（可选）
 * @returns {Promise<Object>} 返回是否成功创建任务
 */
export const createTask = async (params) => {
  const {
    taskType = 'templateToFile',
    templateId,
    season,
    grade,
    major,
    courseName,
    courseId,
    fileOutputName
  } = params

  // 验证必填参数
  if (!templateId) {
    throw new Error('模板ID不能为空')
  }
  if (!season) {
    throw new Error('学期不能为空')
  }
  if (!grade) {
    throw new Error('年级不能为空')
  }
  if (!major) {
    throw new Error('专业不能为空')
  }

  // 课程名称和课程ID至少需要提供一个
  if (!courseName && !courseId) {
    throw new Error('课程名称和课程ID至少需要提供一个')
  }

  const requestData = {
    taskType,
    templateId,
    season,
    grade,
    major
  }

  // 只有当参数存在时才添加到请求数据中
  if (courseName) {
    requestData.courseName = courseName
  }
  if (courseId) {
    requestData.courseId = courseId
  }
  if (fileOutputName) {
    requestData.fileOutputName = fileOutputName
  }

  return await post('/task/create', requestData)
}

/**
 * 查询任务列表
 * @param {Object} params - 查询参数
 * @param {string} [params.template_name] - 模板文件名称
 * @param {string} [params.major] - 课程专业
 * @param {string|number} [params.grade] - 年级
 * @param {string} [params.course_name] - 课程名称（模糊查询）
 * @param {string} [params.export_name] - 导出文件名（模糊查询）
 * @param {number} [params.page] - 页码，默认为1
 * @param {number} [params.size] - 每页大小，默认为10
 * @returns {Promise<Object>} 返回任务列表数据
 */
export const queryTasks = async (params = {}) => {
  const {
    template_name,
    major,
    grade,
    course_name,
    export_name,
    page = 1,
    size = 10
  } = params

  const queryParams = {
    page,
    size
  }

  // 只有当参数存在时才添加到查询参数中
  if (template_name) {
    queryParams.template_name = template_name
  }
  if (major) {
    queryParams.major = major
  }
  if (grade) {
    queryParams.grade = grade
  }
  if (course_name) {
    queryParams.course_name = course_name
  }
  if (export_name) {
    queryParams.export_name = export_name
  }

  return await get('/task/query', queryParams)
}

export default {
  createTask,
  queryTasks
} 